package com.xunwulian.base.dao;

import com.xunwulian.base.entity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface CardInfoDao {

    List<CardInfoEntity> listAll();

    Integer countAll();

    CardInfoEntity getByMsisdn(@Param("msisdn") String msisdn);

    /*
     * 查询码号信息
     * 0 根据msisdn
     * 1 根据imsi
     * 2 根据iccid
     */
    CardInfoEntity qurycardinfo(@NotNull @Param("type") int type,
                                @NotNull @Param("value") String value);


    /**
     * 按月统计开发激活信息
     */
    List<MonthlyOpenCardEntity> monthlyOpenCardInfo();

    /**
     * 按月统计收发短信数据
     */
    List<MonthlySmsEntity> monthlySmsInfo();

    /***
     *
     * 分页数据
     *
     */
    List<CardInfoEntity> listPage(@Param("page") Page page,
                                  @Param("appId") String appId,
                                  @Param("userId") String userId,
                                  @Param("msisdnKey") String msisdnKey,
                                  @Param("userNameKey") String userNameKey);

    /***
     * 分页列表，微信调用
     */
    List<CardInfoEntity> listPageByUserId4Weixin(@Param("page") Page page,
                                                 @Param("userId") String userId);

    /***
     * 搜索卡号，前十条，微信调用
     */
    List<CardInfoEntity> searchCard4Weixin(@Param("userId") String userId,
                                           @Param("searchKey") String searchKey);


    List<CountCardInfoStatusEntity> listCardInfoStatus(@Param("userId") String userId);

    int getToUpdateAuthCardNumByUID(@Param("userId") String userId,
                                    @Param("msisdnStart") String msisdnStart,
                                    @Param("msisdnEnd") String msisdnEnd);

    int getToUpdateAuthCardNum(@Param("msisdnStart") String msisdnStart,
                               @Param("msisdnEnd") String msisdnEnd);


    List<CardInfoEntity> getListByRange(@Param("msisdnStart") String msisdnStart,
                                        @Param("msisdnEnd") String msisdnEnd);

    // 更新号段用户Id或者用户激活日期
    void updateUserIdOrOpenDate(@Param("authUserId") String authUserId,
                                @Param("authUserName") String authUserName,
                                @Param("msisdnStart") String msisdnStart,
                                @Param("msisdnEnd") String msisdnEnd,
                                @Param("openDate") Date openDate,
                                @Param("userOpenDate") Date userOpenDate,
                                @Param("appId") String appId,
                                @Param("pkg") Integer pkg,
                                @Param("userPkg") Integer userPkg,
                                @Param("userPrice") Double userPrice);

    void updateAuth2SubUser(@Param("authUserId") String authUserId,
                            @Param("authUserName") String authUserName,
                            @Param("msisdnStart") String msisdnStart,
                            @Param("msisdnEnd") String msisdnEnd);


    void updateByRange(@Param("openDate") Date openDate,
                       @Param("userOpenDate") Date userOpenDate,
                       @Param("appId") String appId,
                       @Param("appName") String appName,
                       @Param("pkg") Integer pkg,
                       @Param("userPkg") Integer userPkg,
                       @Param("userPrice") Double userPrice,
                       @Param("msisdnStart") String msisdnStart,
                       @Param("msisdnEnd") String msisdnEnd);

    void update4Import(CardInfoEntity cardInfoEntity);

    int insert4Import(CardInfoEntity entity);
}
